package main

import "fmt"

/*

 */
func main() {
	arr := []int{1, 2, 3, 4}
	// 取得切片1-3下标的切片
	slice := arr[0:3]
	fmt.Println(slice)
	// updata(slice)
	fmt.Println(slice)
	// 追加操作
	slice2 := append(slice, 4)
	fmt.Println(slice2)
	// slice为niu时并没有开辟内存空间
	var slice3 = []int{}
	fmt.Printf("len=%d,cap=%d\n", len(slice3), cap(slice3))
	// 手动开辟空间   make(type,len,cap)
	slice4 := make([]int, 10, 20)
	fmt.Printf("len=%d,cap=%d\n", len(slice4), cap(slice4))
	slice5 := []int{2, 4, 6, 8, 10}
	// 去除中间值
	slice5 = append(slice5[:2], slice5[3:]...)
	fmt.Println(slice5)
	// 去首
	slice5 = slice5[1:]
	fmt.Println(slice5)
	// 去尾
	slice5 = slice5[:len(slice5)-1]
	fmt.Println(slice5)
	fmt.Println("------------------------")
	/*
		多个切片可能共享同一个底层数组，这种情况下，对其中一个切片或者底层数组的更改，会影响到其他切片
	*/
	slice6 := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
	s1 := slice6[2:5]
	s2 := s1[2:6:7]
	s2 = append(s2, 100)
	s2 = append(s2, 200)
	s1[2] = 20
	fmt.Println(s1)
	fmt.Println(s2)
	fmt.Println(slice6)
	fmt.Println("------------------------")
	/*
		append在容量不够时会进行扩容操作，返回值是一个新的切片
	*/
	slice7 := make([]int, 2, 2)
	slice7[0] = 0
	slice7[1] = 1
	fmt.Printf("slice7:%d,len=%d,cap=%d\n", slice7, len(slice7), cap(slice7))
	slice8 := append(slice7, 2)
	slice8[1] = 4
	fmt.Printf("slice7:%d,len=%d,cap=%d\n", slice7, len(slice7), cap(slice7))
	fmt.Printf("slice8:%d,len=%d,cap=%d\n", slice8, len(slice8), cap(slice8))
}

/*
	slice是址传递，他底层是数组的一个视图
*/
func updata(slice []int) {
	slice[0] = 100
}
